/**   
 * @Title: QueryUtil.java 
 * @Package com.foreveross.common.utils 
 * @Description: 
 * @author 黎小东  lixiaodong@foreveross.com
 * @date 2015年7月6日 下午3:55:24 
 * @version V1.0   
 */
package com.foreveross.smsh.common;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;

/**
 * @ClassName: QueryUtil
 * @Description:
 * @author 黎小东 lixiaodong@foreveross.com
 * @date 2015年7月6日 下午3:55:24
 * 
 */
public class QueryUtil {
	
	
	public static void setParameters(Query query, Map<String,Object> parameters) {
		if (parameters !=null) {
			for(Iterator<String> iterator =parameters.keySet().iterator();iterator.hasNext();){
				String name = iterator.next();
				Object value = parameters.get(name);
				if(value instanceof List){
					@SuppressWarnings("unchecked")
					List<Object> values = (List<Object>) value;
					query.setParameterList(name, values);
				}else if(value.getClass().isArray()){
					Object[] values =(Object[]) value;
					query.setParameterList(name, values);
				}else{
					query.setParameter(name, value);
				}
			}	
		}
	}
	
	/**
	 * 
	 * @param buffer sql拼装对象
	 * @param colname  查询对象属性名称/表的列名称
	 * @param values  in里面的数据
	 * @param parameters 封装后的注入参数对象
	 */
	public static void appendInWhere(StringBuffer buffer,String colname,List<?> values, Map<String,Object> parameters){
		if(values!=null){
			if(values.size()>1000){
				buffer.append(" (  ");
				int totalPage = (values.size() + 1000 -1) / 1000;
				for (int i = 0; i < totalPage; i++) {
					if(i!=0){
						buffer.append(" or ");	
					} 
					buffer.append(" "+colname+" in (:"+colname+i+") ");
					if(i==totalPage-1){
						parameters.put(colname+i,values.subList(i * 1000,values.size()-1));
					}else{
						parameters.put(colname+i,values.subList(i * 1000,(i + 1) * 1000));
					}	
				}
				buffer.append(" ) ");
			}else{
				buffer.append(" "+colname+" in (:"+colname+") ");
				parameters.put(colname,values);
			}
		}
	}
	
}
